#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n,a[N],mi[N][2],mx[N][2];
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];

	if(a[n-1]>a[n]) {cout<<-1<<'\n';return;}
	
	int _mx=a[n],_mi=a[n-1],pos1=n,pos2=n-1,pos3=n;//pos2小的,pos1大的,pos3记录最大的在哪个位置
	mi[n-1][1]=a[n],mx[n-1][1]=a[n-1];
	for(int i=n-2;i>=1;i--)
	{
		mi[i][0]=pos2;
		mx[i][0]=pos1;	
		if(a[i]<=_mi)
		{
			_mi=a[i];
			pos2=i;
			mi[i][1]=_mi;
			if(pos2<pos3) mx[i][1]=mx[pos3][1];
			else mx[i][1]=mx[i+1][i];
			continue;
		}
		if(a[i]>_mx)
		{
			_mx=a[i];
			pos3=i;
			mx[i][1]=_mx;
			mi[i][1]=mi[i+1][1];
			continue;
		}

		mi[i][1]=_mi;
		mx[i][1]=_mx;
	}

	bool ok=true;
	for(int i=1;i<n;i++)
	{
		if(a[i+1]<a[i]) {ok=false;break;}
	}
	if(ok){cout<<0<<'\n';return;}


	vector<pair<int,int>> cnt;
	vector<int> cur;
	for(int i=1;i<=n-2;i++)
	{
		if(a[i]<=a[mi[i][0]]-a[mx[i][0]]) continue;
		else cnt.push_back({mi[i][0],mx[i][0]}),cur.push_back(i),a[i]=a[mi[i][0]]-a[mx[i][0]];

	}
	
	ok =true;
	for(int i=1;i<n;i++)
	{
		if(a[i+1]<a[i]) {ok=false;break;}
	}
	if(!ok) {cout<<-1<<'\n';return;}


	cout<<cnt.size()<<'\n';

	int cur_pos=0;
	for(auto[k,v]:cnt)
	{
		cout<<cur[cur_pos++]<<" "<<k<<" "<<v<<'\n';
	}

}

int main()
{
	close();
	int T; cin>>T;
	while (T--) solve();
	return 0;
}
//生成数组非递减